# -*- coding: utf-8 -*-
#autor: João Rebocho Nº 6035
#data: 14/10/2013
#obs: Exemplo Do Livro da aula4
#

import pickle

#Ficheiros CSV e bases de dados
#Declaração de constantes indicadores da posição dos itens
#no ficheiro csv
ORDEM = 0
NUMERO = 1
NOME = 2

#
#primeira tecnica de leitura de ficheiros csv
#

#abertura do ficheiro para leitura
ficheiro = open('presencaslp28outubro.csv','r')

#para cada linha do ficheiro formacao de uma lista de elementos
#separados por virgulas (Comma Separated Values)
for line in ficheiro:
	lista = line.split(',')
	print lista[ORDEM], ':', lista[NUMERO], ':', lista[NOME]
	pass

ficheiro.close()

#em alternativa, processamento para a biblioteca padrao
import csv

reader = csv.reader(open('presencaslp28outubro.csv','r'))
#gera iteradamente a lista separada por virguças
for lista_linhas in reader:
	#print lista_linhas
	pass

#e agora utilizacao da biblioteca sqlite3
import sqlite3

#conn- conexao ao ficheiro de base de dados
conn = sqlite3.connect('precencas.sqlite3')

#o cursor e um iterador de posicao na base de dados
cursor = conn.cursor()
reader = csv.reader(open('presencaslp28outubro.csv','r'))

# c- contador para impedir a escrita na base de dados
# dos dados da primeira linha do ficheiro csv
c = 0
for lista_linhas in reader:
	# se ainda na leu a primeira linha
	# prossegue para a segunda linha
	c  += 1
	if c==1:
		continue
	
	#parte-se do pricipio de que ja esta criada a base de dados
	#com uma tabela designada por alunos e com tres campos
	#designados por ordem, numero e nome
	#instrução SQL
	
                                                         
	
	instrucao = '''INSERT INTO alunos(ordem, numero, nome)
                   VALUES('0', '1', '2')'''.format(lista_linhas[ORDEM],
												   lista_linhas[NUMERO],
												   lista_linhas[NOME],)	
												   
	#aqui executa -se a instrucao SQL
	cursor.execute(instrucao)
	pass
	
#sem commit() os dados nao ficam na base de dados
conn.commit()
cursor.close()																	

#Estrutura de dados persistentes
#Dados conservados com o modulo pickle
#declaração de uma classe apenas para exemplo
class ClasseExemplo:
    def __init__(self, nome):
        self.nome = nome
        pass

    def __str__(self):
        return "obj: " + str(self.nome)
        
#formacao dos dados a conservar
lista_exemplo = [ClasseExemplo(str(x)) for x in range(10)]
for obj in lista_exemplo:
	print obj
	
#armazenamento como picle
ficheiro = open("pikle.dat", "w")
pickle.dump(lista_exemplo, ficheiro)
ficheiro.close()

#remocao da lista_exemplos
del lista_exemplo


#recriacao dos dados
ficheiro = open("pikle.dat", "r")
lista_exemplo = pickle.load(ficheiro)
ficheiro.close()


#Erros e Exceções
#processamento em caso de erro
a = 0
b = 0

try:
	c = a/b
	
except:
	c = 0
	
else:
	c = 1

finally:
	print "exemplo de processamento de excecoes"

print c

b = 1	
try:
	c = a/b
	
except:
	c = 0
	
else:
	c = 1

finally:
	print "exemplo de processamento de excecoes"

print c

b= 0
try:
	c = a/b
	
except ZeroDivisionError:
	c = 2
	
else:
	c = 1

finally:
	print "exemplo de processamento de excecoes"
	
print c

